/**
 * 应用路由配置
 * 负责管理整个应用的路由和页面懒加载
 * 
 * 功能说明：
 * - 使用React.lazy实现页面懒加载，优化首屏性能
 * - 使用Suspense处理懒加载过程中的加载状态
 * - 配置所有业务页面的路由映射
 * - 支持动态路由参数（如/:id）
 * 
 * @author 项目开发团队
 * @version 1.0.0
 */

import React, { Suspense, lazy } from 'react'
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
import { SpinLoading } from 'antd-mobile'
import ProtectedRoute from '../components/ProtectedRoute'

// ==================== 页面懒加载配置 ====================
// 使用React.lazy实现代码分割，减少首屏加载时间
// 每个页面组件都会被单独打包成一个chunk

// 认证相关页面
const Login = lazy(() => import('../pages/Login'))                  // 登录页面
const Unauthorized = lazy(() => import('../pages/Unauthorized'))    // 未授权页面

// 主要功能页面
const Home = lazy(() => import('../pages/Home'))                    // 首页
const Message = lazy(() => import('../pages/Message'))              // 消息中心
const Profile = lazy(() => import('../pages/Profile'))              // 个人中心
const Website = lazy(() => import('../pages/Website'))              // 官网
const Menu = lazy(() => import('../pages/Menu'))                    // 菜单页
const Health = lazy(() => import('../pages/Health'))                // 健康档案
const HealthDetail = lazy(() => import('../pages/HealthDetail'))    // 健康详情

// 挂号相关页面
const RegisterNotice = lazy(() => import('../pages/RegisterNotice'))    // 预约须知
const RegisterAreas = lazy(() => import('../pages/RegisterAreas'))      // 选择区域
const Register = lazy(() => import('../pages/Register'))                // 挂号页面
const DoctorList = lazy(() => import('../pages/DoctorList'))            // 医生列表
const RegisterResult = lazy(() => import('../pages/RegisterResult'))    // 挂号结果

// 家庭管理相关页面
const Family = lazy(() => import('../pages/Family'))                    // 家庭管理
const AddMember = lazy(() => import('../pages/Family/AddMember'))       // 添加家庭成员
const MemberDetail = lazy(() => import('../pages/Family/MemberDetail')) // 成员详情

// 缴费相关页面
const Payment = lazy(() => import('../pages/Payment'))                  // 缴费中心
const PaymentDetail = lazy(() => import('../pages/PaymentDetail'))      // 缴费详情

// 记录相关页面
const Records = lazy(() => import('../pages/Records'))                  // 就诊记录
const RecordsConsultation = lazy(() => import('../pages/Records/Consultation')) // 咨询记录
const RecordsOutpatient = lazy(() => import('../pages/Records/Outpatient'))     // 门诊记录

// 订单相关页面
const OrdersRegistration = lazy(() => import('../pages/Orders/Registration'))   // 挂号订单
const OrdersDoctorAdvice = lazy(() => import('../pages/Orders/DoctorAdvice'))  // 医嘱订单

// 个人中心相关页面
const Favorites = lazy(() => import('../pages/Favorites'))              // 我的收藏
const Address = lazy(() => import('../pages/Address'))                  // 地址管理
const Feedback = lazy(() => import('../pages/Feedback'))                // 意见反馈
const Help = lazy(() => import('../pages/Help'))                        // 帮助中心
const Credit = lazy(() => import('../pages/Credit'))                    // 信用中心
const About = lazy(() => import('../pages/About'))                      // 关于我们
const CustomerService = lazy(() => import('../pages/CustomerService'))  // 客服中心
const Settings = lazy(() => import('../pages/Settings'))                // 设置页面

/**
 * 懒加载过程中的加载组件
 * 在页面组件加载时显示加载动画
 * @returns {JSX.Element} 加载组件
 */
const Loading = () => (
  <div style={{
    display: 'flex',
    justifyContent: 'center',
    alignItems: 'center',
    height: '100vh'
  }}>
    <SpinLoading color='primary' />
  </div>
)

/**
 * 应用路由组件
 * 配置所有页面的路由映射关系
 * @returns {JSX.Element} 路由组件
 */
const AppRouter = () => {
  return (
    <BrowserRouter>
      {/* Suspense: 处理懒加载组件的加载状态 */}
      <Suspense fallback={<Loading />}>
        <Routes>
          {/* ==================== 认证相关页面 ==================== */}
          <Route path="/login" element={<Login />} />                {/* 登录页面 */}
          <Route path="/unauthorized" element={<Unauthorized />} />  {/* 未授权页面 */}
          
          {/* ==================== 默认路由 ==================== */}
          {/* 根路径重定向到首页 */}
          <Route path="/" element={<Navigate to="/home" replace />} />
          
          {/* ==================== 主要功能页面（需要登录） ==================== */}
          <Route path="/home" element={
            <ProtectedRoute>
              <Home />
            </ProtectedRoute>
          } />                    {/* 首页 */}
          <Route path="/message" element={
            <ProtectedRoute>
              <Message />
            </ProtectedRoute>
          } />              {/* 消息中心 */}
          <Route path="/profile" element={
            <ProtectedRoute>
              <Profile />
            </ProtectedRoute>
          } />              {/* 个人中心 */}
          <Route path="/website" element={<Website />} />              {/* 官网（公开页面） */}
          <Route path="/menu" element={
            <ProtectedRoute>
              <Menu />
            </ProtectedRoute>
          } />                    {/* 菜单页 */}
          
          {/* ==================== 健康档案相关（需要登录） ==================== */}
          <Route path="/health" element={
            <ProtectedRoute>
              <Health />
            </ProtectedRoute>
          } />                {/* 健康档案列表 */}
          <Route path="/health/:id" element={
            <ProtectedRoute>
              <HealthDetail />
            </ProtectedRoute>
          } />      {/* 健康档案详情（动态路由） */}
          
          {/* ==================== 挂号流程相关（需要登录） ==================== */}
          <Route path="/register/notice" element={
            <ProtectedRoute>
              <RegisterNotice />
            </ProtectedRoute>
          } />    {/* 预约须知 */}
          <Route path="/register/areas" element={
            <ProtectedRoute>
              <RegisterAreas />
            </ProtectedRoute>
          } />      {/* 选择区域 */}
          <Route path="/register" element={
            <ProtectedRoute>
              <Register />
            </ProtectedRoute>
          } />                {/* 挂号页面 */}
          <Route path="/register/doctors" element={
            <ProtectedRoute>
              <DoctorList />
            </ProtectedRoute>
          } />       {/* 医生列表 */}
          <Route path="/register/result" element={
            <ProtectedRoute>
              <RegisterResult />
            </ProtectedRoute>
          } />    {/* 挂号结果 */}
          
          {/* ==================== 家庭管理相关（需要登录） ==================== */}
          <Route path="/family" element={
            <ProtectedRoute>
              <Family />
            </ProtectedRoute>
          } />                    {/* 家庭管理 */}
          <Route path="/family/add" element={
            <ProtectedRoute>
              <AddMember />
            </ProtectedRoute>
          } />             {/* 添加家庭成员 */}
          <Route path="/family/detail/:id" element={
            <ProtectedRoute>
              <MemberDetail />
            </ProtectedRoute>
          } />   {/* 成员详情（动态路由） */}
          <Route path="/family-management" element={
            <ProtectedRoute>
              <Family />
            </ProtectedRoute>
          } />         {/* 家庭管理（别名） */}
          
          {/* ==================== 缴费相关（需要登录） ==================== */}
          <Route path="/payment" element={
            <ProtectedRoute>
              <Payment />
            </ProtectedRoute>
          } />                  {/* 缴费中心 */}
          <Route path="/payment/:id" element={
            <ProtectedRoute>
              <PaymentDetail />
            </ProtectedRoute>
          } />        {/* 缴费详情（动态路由） */}
          
          {/* ==================== 记录相关（需要登录） ==================== */}
          <Route path="/records" element={
            <ProtectedRoute>
              <Records />
            </ProtectedRoute>
          } />                  {/* 就诊记录 */}
          <Route path="/records/consultation" element={
            <ProtectedRoute>
              <RecordsConsultation />
            </ProtectedRoute>
          } /> {/* 咨询记录 */}
          <Route path="/records/outpatient" element={
            <ProtectedRoute>
              <RecordsOutpatient />
            </ProtectedRoute>
          } />     {/* 门诊记录 */}
          
          {/* ==================== 订单相关（需要登录） ==================== */}
          <Route path="/orders/registration" element={
            <ProtectedRoute>
              <OrdersRegistration />
            </ProtectedRoute>
          } />   {/* 挂号订单 */}
          <Route path="/orders/doctor-advice" element={
            <ProtectedRoute>
              <OrdersDoctorAdvice />
            </ProtectedRoute>
          } />  {/* 医嘱订单 */}
          
          {/* ==================== 个人中心相关（需要登录） ==================== */}
          <Route path="/favorites" element={
            <ProtectedRoute>
              <Favorites />
            </ProtectedRoute>
          } />              {/* 我的收藏 */}
          <Route path="/address" element={
            <ProtectedRoute>
              <Address />
            </ProtectedRoute>
          } />                  {/* 地址管理 */}
          <Route path="/feedback" element={
            <ProtectedRoute>
              <Feedback />
            </ProtectedRoute>
          } />                {/* 意见反馈 */}
          <Route path="/help" element={<Help />} />                        {/* 帮助中心（公开页面） */}
          <Route path="/credit" element={
            <ProtectedRoute>
              <Credit />
            </ProtectedRoute>
          } />                    {/* 信用中心 */}
          <Route path="/about" element={<About />} />                      {/* 关于我们（公开页面） */}
          <Route path="/customer-service" element={<CustomerService />} />  {/* 客服中心（公开页面） */}
          <Route path="/settings" element={
            <ProtectedRoute>
              <Settings />
            </ProtectedRoute>
          } />                {/* 设置页面 */}
          
          {/* ==================== 404处理 ==================== */}
          {/* 所有未匹配的路由都重定向到首页 */}
          <Route path="*" element={<Navigate to="/home" replace />} />
        </Routes>
      </Suspense>
    </BrowserRouter>
  )
}

export default AppRouter
